package com.example.shopping.controller;

import com.example.shopping.pojo.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.util.*;

/*
Create by 苍狼 于 2020/2/2
站在巅峰看世界，
落在深渊思人生。
*/
//@Api(value = "shopping接口",description="shopping的根目录")
//@RestController
//@RequestMapping(value="/shopping")

/**
 * 例子：swagger的具体事例
 *
 * 注解说明
 * 其中@ApiOperation和@ApiParam为添加的API相关注解，个参数说明如下：
 * @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”；其他参数可参考源码；
 * @ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”
 *
 * 在上面只展示了如何使用，这里将对上面添加的swagger注解进行说明，笔记使用时参考了swagger annotations Api 手册，接下来进行部分常用注解使用说明介绍。
 * - @ApiIgnore 忽略注解标注的类或者方法，不添加到API文档中
 *
 * @ApiOperation 展示每个API基本信息
 *
 * value api名称
 * notes 备注说明
 * @ApiImplicitParam 用于规定接收参数类型、名称、是否必须等信息
 *
 * name 对应方法中接收参数名称
 * value 备注说明
 * required 是否必须 boolean
 * paramType 参数类型 body、path、query、header、form中的一种
 * body 使用@RequestBody接收数据 POST有效
 * path 在url中配置{}的参数
 * query 普通查询参数 例如 ?query=q ,jquery ajax中data设置的值也可以，例如 {query:”q”},springMVC中不需要添加注解接收
 * header 使用@RequestHeader接收数据
 * form 笔者未使用，请查看官方API文档
 * dataType 数据类型，如果类型名称相同，请指定全路径，例如 dataType = “java.util.Date”，springfox会自动根据类型生成模型
 * @ApiImplicitParams 包含多个@ApiImplicitParam
 *
 * @ApiModelProperty 对模型中属性添加说明，例如 上面的PageInfoBeen、BlogArticleBeen这两个类中使用，只能使用在类中。
 *
 * value 参数名称
 * required 是否必须 boolean
 * hidden 是否隐藏 boolean
 * 其他信息和上面同名属性作用相同，hidden属性对于集合不能隐藏，目前不知道原因
 * @ApiParam 对单独某个参数进行说明，使用在类中或者controller方法中都可以。注解中的属性和上面列出的同名属性作用相同
 *
 */
public class UserSwaggerController {
//    static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());
//
//
//
//    @ApiOperation(value="获取用户列表", notes="")
//    @RequestMapping(value={""}, method=RequestMethod.GET)
//    public List<User> getUserList() {
//        List<User> r = new ArrayList<User>(users.values());
//        return r;
//    }
//
//
//    @ApiOperation(value="创建用户", notes="根据User对象创建用户")
//    @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
//    @RequestMapping(value="", method=RequestMethod.POST)
//    public String postUser(@RequestBody User user) {
//        users.put(user.getId(), user);
//        return "success";
//    }
//    @ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")
//    @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
//    @RequestMapping(value="/{id}", method=RequestMethod.GET)
//    public User getUser(@PathVariable Long id) {
//        return users.get(id);
//    }
//
//
//
//    @ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象，并根据传过来的user信息来更新用户详细信息")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long"),
//            @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
//    })
//    @RequestMapping(value="/{id}", method= RequestMethod.PUT)
//        public String putUser(@PathVariable Long id, @RequestBody User user) {
//        User u = users.get(id);
//        u.setName(user.getName());
//        u.setAge(user.getAge());
//        users.put(id, u);
//        return "success";
//    }
//
//
//    @ApiOperation(value="删除用户", notes="根据url的id来指定删除对象")
//    @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
//    @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
//    public String deleteUser(@PathVariable Long id) {
//        users.remove(id);
//        return "success";
//    }

}
